#ifndef DRIVER_H_
#define DRIVER_H_

#include <stdlib.h>

// adaptar a los archivos que correspondan
#include "aed2.h"

#include "RedSocial.h"

using namespace std;

// Deberan adaptar la implementacion del Driver para que corresponda
// a los archivos, nombres de clases y metodos de su implementacion.
// El codigo otorgado del driver deberia ser de mucha ayuda para poder usarlo.
//
// IMPORTANTE: No debe alterarse en ningun aspecto la interfaz del driver.
//             Es por esto que se usan unicamente tipos basicos en la misma.
class Driver {
public:
	Driver();
	~Driver();

	void agregarPaises(int cantidadPaises); // cantidadPaises veces de aplicar agregarPais(r)
	void restringirVer(int p1, int p2); // restringirVer(r,p1,p2)
	bool tieneAlgunHueco(); // tieneAlgunHueco?(r)

	void registrar(string u, int p); // registrar(s,u,p)
	void solicitaAmistad(string u1, string u2); // quererSerAmigo(s,u1,u2)
	bool sonAmigos(string u1, string u2); // sonAmigos?(s,u1,u2)
	bool quiereSerAmigo(string u1, string u2); // quiereSerAmigo?(s,u1,u2)
	void publicar(string autor, string contenido, Lista<string> tags); // publicar(s,m)

	int cantidadMensajesVisibles(string u); // long(mensajesVisibles(s,u))
	string mensajeVisible(string u, int i); // i-esimo elemento de mensajeVisible(s,u). primer elemento es el 0

	int cantidadMensajesRecientes(string u); // long(mensajesVisiblesRecientes(s,u))
	string mensajeReciente(string u, int i); // i-esimo elemento de mensajesVisiblesRecientes(s,u). primer elemento es el 0

	int cantidadTagsRecientes(); // #tagsRecientes(s)
	bool esTagReciente(string t); // t \in tagsRecientes(s)
	int repeticionesRecientesTag(string t); // repeticionesRecientesTag(s, t)

	void avanzarDia(int c); // avanza el dia y vuelve a 0 los ticks de la fecha del proximo mensaje a publicar
	void avanzarTick(int c); // avanza los ticks de la fecha del proximo mensaje a publicar

private:
	Reglas* reglas;
	RedSocial* redSocial;

	// representan el dia y ticks de la fecha del proximo
	// mensaje a publicar. Se puede alterar con avanzarDia/avanzarTick
	int dia;
	int ticks;

	// devuelve la fecha que representa la hora actual
	Fecha ahora();

	// usada para devolver strings con la informacion del
	// mensaje en lugar algo tipo mensaje.
	string mostrarMensaje(string autor, string contenido, Lista<string> tags);
};

#endif /* DRIVER_H_ */
